package com.装饰者模式.装饰者;

import com.装饰者模式.Drink;

import java.math.BigDecimal;

/**
 * 装饰者父类【调味品父类】
 * 将装饰着单独抽取一个父类就是为了简化子类得复杂度，子类只需要继承该父类就能达到功能需求了
 */
public class Decorator extends Drink {

    /**
     * 被装饰者  【咖啡类：美式咖啡、中式咖啡、意大利咖啡】
     */
    private Drink drink;

    //构造器：在初始化装饰者的时候，给咖啡赋值
    public Decorator(Drink drink) {
        this.drink = drink;
    }

    /**
     * super.getPrice()：是自己调料的价格
     * drink.getPrice()：是咖啡的价格
     */
    @Override
    public BigDecimal cost() {
        return super.getPrice().add(drink.cost());
    }

    /**
     * super.getDesc()：装饰者的描述
     * super.getPrice()：装饰者的价格
     * drink.getDesc()：被装饰者的描述
     */
    @Override
    public String getDesc() {
        return super.getDesc()+"->"+super.getPrice()+"&&"+drink.getDesc();
    }
}
